//函数的第一个参数解构
function workout({gym}, times) { 
    console.log('Workout in ' + gym + ' for ' + times + ' times');
}
let thisWeek = {gym: 'Gym A'};
workout(thisWeek, 2);   // Workout in Gym A for 2 times


/*
下面的例子, 对第一个参数进行参数解构，并对todos变量进行进一步解构。
这样，传递给workout()函数的参数必须具有todos属性，并且其值是一个数组。
否则将抛出类型错误。这是因为JavaScript无法对未定义或null进行解构。我们可以通过给待办事项一个默认值来改善这一点，如下所示：
*/
function workout2({gym, todos}) {
    let [first] = todos;
    console.log('Start ' + first + ' in ' + gym);
}

let today =  {gym: 'Gym A', todos: ['Treadmill']};
workout2(today);         // Start Treadmill in Gym A
//workout2({gym: 'Gym B'}) // TypeError: todos is not iterable


/*
对上面的情况可以通过给待办事项一个默认值来改善这一点，如下所示：
*/
function workout3({gym, todos=['Treadmill']}) {
    let [first] = todos;
    console.log('Start ' + first + ' in ' + gym);
}

workout3({gym: 'Gym C'}); // Start Treadmill in Gym C
workout3();                //TypeError: Cannot destructure property 'gym' 
                           //of 'undefined' as it is undefined.

